/**
 * 给定一个数组 points，其中points[i] = [xi, yi]表示 X-Y 平面上的一个点，并且是一个整数 k ，返回离原点 (0,0) 最近的 k 个点。
 *
 * 这里，平面上两点之间的距离是欧几里德距离（√(x1- x2)^2+ (y1- y2)^2）。
 *
 * 你可以按 任何顺序 返回答案。除了点坐标的顺序之外，答案 确保 是 唯一 的。
 *
 https://leetcode.cn/problems/k-closest-points-to-origin/
 */
class KClosestPriority {
    public int[][] kClosest(int[][] points, int k) {
        int m=points.length;
        PriorityQueue<int[]> minHeap=new PriorityQueue<>(new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0]*o1[0]+o1[1]*o1[1]-o2[0]*o2[0]-o2[1]*o2[1];
            }
        });
        for(int i=0;i<m;i++){
            minHeap.offer(points[i]);
        }
        int[][] ans=new int[k][2];
        for(int i=0;i<k;i++){
            ans[i]=minHeap.poll();
        }
        return ans;
    }
}